package com.github.why168.leetcode;

/**
 * https://leetcode-cn.com/problems/string-to-url-lcci/
 * <p>
 * URL化。编写一种方法，将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符，并且知道字符串的“真实”长度。（注：用Java实现的话，请使用字符数组实现，以便直接在数组上操作。）
 * 示例 1：
 * 输入："Mr John Smith    ", 13
 * 输出："Mr%20John%20Smith"
 * 示例 2：
 * 输入："               ", 5
 * 输出："%20%20%20%20%20"
 * <p>
 * 提示：
 * 字符串长度在 [0, 500000] 范围内。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/string-to-url-lcci
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * <p>
 * 隐藏提示：
 * 1.从尾到头开始修改字符串通常最容易。
 * 2.你可能需要知道空格的数量。你能数一下吗？
 *
 * @author Edwin Wu
 * @since 1.0.0
 */
public class string_to_url_lcci {

    public static void main(String[] args) {
        Solution solution = new Solution();

        System.out.println(solution.replaceSpaces("Mr John Smith    ", 13));
//        System.out.println(solution.replaceSpaces("               ", 5));
    }

    static class Solution {
        public String replaceSpaces(String S, int length) {
            char[] s = S.toCharArray();
            int M = 0;   //有效空格数
            int j = 0;   //供替换时使用
            int N = length;   //有效操作长度

            //得到原数组有效空格数
            for (int i = 0; i < N; i++) {
                if (s[i] == ' '){
                    M ++;
                }
            }
            //得到结果数组的有效长度
            M = M * 2 + N;
            char[] arr = new char[M];
            //进行替换
            for (int i = 0; i < N; i++) {
                if (s[i] == ' '){
                    arr[j++] = '%';
                    arr[j++] = '2';
                    arr[j++] = '0';
                }else{
                    arr[j++] = s[i];
                }
            }
            return new String(arr);
        }

//        public String replaceSpaces(String S, int length) {
//            char[] chars = S.toCharArray();
//            int nilInt = 0;
//            for (char item : chars) {
//                if (item == ' ') {
//                    nilInt++;
//                }
//            }
//
//            int i1 = nilInt / 3;
//
//
//            for (int i = length - 1; i >= 0; i--) {
//                char item = chars[i];
//                if (item == ' ') {
//                    chars[i--] = '%';
//                    chars[i--] = '2';
//                    chars[i--] = '0';
//                    continue;
//                }
//                chars[i] = item;
//            }
//
//
//            return new String(chars);
//        }
    }
}
